{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to DataFrames\n",
    "**[Bogumił Kamiński](http://bogumilkaminski.pl/about/), November 26, 2020**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "using DataFrames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "using CategoricalArrays"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extras - selected functionalities of selected packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "using FreqTables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Int64,2}\n",
       "a ╲ b │  x   y   z\n",
       "──────┼───────────\n",
       "'a'   │ 77  80  94\n",
       "'b'   │ 65  91  97\n",
       "'c'   │ 81  87  77\n",
       "'d'   │ 94  81  76"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a=rand('a':'d', 1000), b=rand([\"x\", \"y\", \"z\"], 1000))\n",
    "ft = freqtable(df, :a, :b) # observe that dimensions are sorted if possible"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(77, 97)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ft[1,1], ft['b', \"z\"] # you can index the result using numbers or names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Float64,2}\n",
       "a ╲ b │        x         y         z\n",
       "──────┼─────────────────────────────\n",
       "'a'   │ 0.306773  0.318725  0.374502\n",
       "'b'   │ 0.256917  0.359684  0.383399\n",
       "'c'   │ 0.330612  0.355102  0.314286\n",
       "'d'   │ 0.374502  0.322709  0.302789"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prop(ft, margins=1) # getting proportions - 1 means we want to calculate them in rows (first dimension)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Float64,2}\n",
       "a ╲ b │        x         y         z\n",
       "──────┼─────────────────────────────\n",
       "'a'   │ 0.242902  0.235988  0.273256\n",
       "'b'   │ 0.205047  0.268437  0.281977\n",
       "'c'   │ 0.255521  0.256637  0.223837\n",
       "'d'   │  0.29653  0.238938   0.22093"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prop(ft, margins=2) # and columns are normalized to 1.0 now"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Named Array{Int64,1}\n",
       "Dim1                             │ \n",
       "─────────────────────────────────┼──\n",
       "CategoricalValue{Int64,UInt32} 3 │ 5\n",
       "CategoricalValue{Int64,UInt32} 1 │ 2\n",
       "CategoricalValue{Int64,UInt32} 2 │ 3\n",
       "CategoricalValue{Int64,UInt32} 4 │ 0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = categorical(rand(1:3, 10))\n",
    "levels!(x, [3, 1, 2, 4]) # reordering levels and adding an extra level\n",
    "freqtable(x) # order is preserved and not-used level is shown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Named Array{Int64,1}\n",
       "Dim1    │ \n",
       "────────┼──\n",
       "1       │ 2\n",
       "2       │ 1\n",
       "3       │ 1\n",
       "missing │ 1"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freqtable([1,1,2,3,missing]) # by default missings are listed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element Named Array{Int64,1}\n",
       "Dim1  │ \n",
       "──────┼──\n",
       "1     │ 2\n",
       "2     │ 1\n",
       "3     │ 1"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freqtable([1,1,2,3,missing], skipmissing=true) # but we can skip them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2×2 Named Array{Int64,2}\n",
       "a ╲ b │   5    6\n",
       "──────┼─────────\n",
       "3     │ 253  256\n",
       "4     │ 245  246"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a=rand(3:4, 1000), b=rand(5:6, 1000))\n",
    "ft = freqtable(df, :a, :b) # now dimensions are numbers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "BoundsError: attempt to access 2×2 Array{Int64,2} at index [3, 5]",
     "output_type": "error",
     "traceback": [
      "BoundsError: attempt to access 2×2 Array{Int64,2} at index [3, 5]",
      "",
      "Stacktrace:",
      " [1] getindex at .\\array.jl:810 [inlined]",
      " [2] getindex(::NamedArrays.NamedArray{Int64,2,Array{Int64,2},Tuple{OrderedCollections.OrderedDict{Int64,Int64},OrderedCollections.OrderedDict{Int64,Int64}}}, ::Int64, ::Int64) at D:\\AppData\\.julia\\packages\\NamedArrays\\kMq4N\\src\\index.jl:17",
      " [3] top-level scope at In[12]:1",
      " [4] include_string(::Function, ::Module, ::String, ::String) at .\\loading.jl:1091"
     ]
    }
   ],
   "source": [
    "ft[3,5] # this is an error - standard array indexing takes precedence"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "253"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ft[Name(3), Name(5)] # you have to use Name() wrapper"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta.jl - working on `DataFrame`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DataFramesMeta.jl provides a more terse syntax due to the benefits of metaprogramming."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "using DataFramesMeta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr><tr><th></th><th>Int64</th><th>Char</th><th>Bool</th></tr></thead><tbody><p>8 rows × 3 columns</p><tr><th>1</th><td>1</td><td>a</td><td>1</td></tr><tr><th>2</th><td>2</td><td>b</td><td>0</td></tr><tr><th>3</th><td>3</td><td>c</td><td>1</td></tr><tr><th>4</th><td>4</td><td>d</td><td>0</td></tr><tr><th>5</th><td>5</td><td>e</td><td>1</td></tr><tr><th>6</th><td>6</td><td>f</td><td>0</td></tr><tr><th>7</th><td>7</td><td>g</td><td>1</td></tr><tr><th>8</th><td>8</td><td>h</td><td>0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& x & y & z\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char & Bool\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a & 1 \\\\\n",
       "\t2 & 2 & b & 0 \\\\\n",
       "\t3 & 3 & c & 1 \\\\\n",
       "\t4 & 4 & d & 0 \\\\\n",
       "\t5 & 5 & e & 1 \\\\\n",
       "\t6 & 6 & f & 0 \\\\\n",
       "\t7 & 7 & g & 1 \\\\\n",
       "\t8 & 8 & h & 0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m8×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m x     \u001b[0m\u001b[1m y    \u001b[0m\u001b[1m z     \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\u001b[90m Bool  \u001b[0m\n",
       "─────┼────────────────────\n",
       "   1 │     1  a      true\n",
       "   2 │     2  b     false\n",
       "   3 │     3  c      true\n",
       "   4 │     4  d     false\n",
       "   5 │     5  e      true\n",
       "   6 │     6  f     false\n",
       "   7 │     7  g      true\n",
       "   8 │     8  h     false"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(x=1:8, y='a':'h', z=repeat([true,false], outer=4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Array{Int64,1}:\n",
       " 2\n",
       " 2\n",
       " 4\n",
       " 4\n",
       " 6\n",
       " 6\n",
       " 8\n",
       " 8"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@with(df, :x+:z) # expressions with columns of DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Array{Char,1}:\n",
       " 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)\n",
       " 'e': ASCII/Unicode U+0065 (category Ll: Letter, lowercase)\n",
       " 'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase)\n",
       " 'k': ASCII/Unicode U+006B (category Ll: Letter, lowercase)\n",
       " 'g': ASCII/Unicode U+0067 (category Ll: Letter, lowercase)\n",
       " 'j': ASCII/Unicode U+006A (category Ll: Letter, lowercase)\n",
       " 'm': ASCII/Unicode U+006D (category Ll: Letter, lowercase)\n",
       " 'p': ASCII/Unicode U+0070 (category Ll: Letter, lowercase)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@with df begin # you can define code blocks\n",
    "    a = :x[:z]\n",
    "    b = :x[.!:z]\n",
    "    :y + [a; b]\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "UndefVarError: a not defined",
     "output_type": "error",
     "traceback": [
      "UndefVarError: a not defined",
      "",
      "Stacktrace:",
      " [1] top-level scope",
      " [2] include_string(::Function, ::Module, ::String, ::String) at .\\loading.jl:1091"
     ]
    }
   ],
   "source": [
    "a # @with creates hard scope so variables do not leak out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element BitArray{1}:\n",
       " 1\n",
       " 0\n",
       " 0"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = DataFrame(a = [:a, :b, :c])\n",
    "@with(df2, :a .== ^(:a)) # sometimes we want to work on a raw Symbol, ^() escapes it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element Array{Int64,1}:\n",
       " 5\n",
       " 7\n",
       " 9"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_str = \"x\"\n",
    "y_str = \"y\"\n",
    "df2 = DataFrame(x=1:3, y=4:6, z=7:9)\n",
    "@with(df2, cols(x_str) + cols(y_str)) # cols(expression) selects given columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr><tr><th></th><th>Int64</th><th>Char</th><th>Bool</th></tr></thead><tbody><p>2 rows × 3 columns</p><tr><th>1</th><td>1</td><td>a</td><td>1</td></tr><tr><th>2</th><td>3</td><td>c</td><td>1</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& x & y & z\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char & Bool\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a & 1 \\\\\n",
       "\t2 & 3 & c & 1 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m2×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m x     \u001b[0m\u001b[1m y    \u001b[0m\u001b[1m z    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\u001b[90m Bool \u001b[0m\n",
       "─────┼───────────────────\n",
       "   1 │     1  a     true\n",
       "   2 │     3  c     true"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@where(df, :x .< 4, :z .== true) # a very useful macro for filtering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>Char</th></tr></thead><tbody><p>8 rows × 3 columns</p><tr><th>1</th><td>1</td><td>2</td><td>a</td></tr><tr><th>2</th><td>2</td><td>4</td><td>b</td></tr><tr><th>3</th><td>3</td><td>6</td><td>c</td></tr><tr><th>4</th><td>4</td><td>8</td><td>d</td></tr><tr><th>5</th><td>5</td><td>10</td><td>e</td></tr><tr><th>6</th><td>6</td><td>12</td><td>f</td></tr><tr><th>7</th><td>7</td><td>14</td><td>g</td></tr><tr><th>8</th><td>8</td><td>16</td><td>h</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& x & y & z\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 2 & a \\\\\n",
       "\t2 & 2 & 4 & b \\\\\n",
       "\t3 & 3 & 6 & c \\\\\n",
       "\t4 & 4 & 8 & d \\\\\n",
       "\t5 & 5 & 10 & e \\\\\n",
       "\t6 & 6 & 12 & f \\\\\n",
       "\t7 & 7 & 14 & g \\\\\n",
       "\t8 & 8 & 16 & h \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m8×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m x     \u001b[0m\u001b[1m y     \u001b[0m\u001b[1m z    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼────────────────────\n",
       "   1 │     1      2  a\n",
       "   2 │     2      4  b\n",
       "   3 │     3      6  c\n",
       "   4 │     4      8  d\n",
       "   5 │     5     10  e\n",
       "   6 │     6     12  f\n",
       "   7 │     7     14  g\n",
       "   8 │     8     16  h"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@select(df, :x, y = 2*:x, z=:y) # create a new DataFrame based on the old one"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>Bool</th></tr></thead><tbody><p>8 rows × 3 columns</p><tr><th>1</th><td>2</td><td>1</td><td>1</td></tr><tr><th>2</th><td>4</td><td>2</td><td>0</td></tr><tr><th>3</th><td>6</td><td>3</td><td>1</td></tr><tr><th>4</th><td>8</td><td>4</td><td>0</td></tr><tr><th>5</th><td>10</td><td>5</td><td>1</td></tr><tr><th>6</th><td>12</td><td>6</td><td>0</td></tr><tr><th>7</th><td>14</td><td>7</td><td>1</td></tr><tr><th>8</th><td>16</td><td>8</td><td>0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& x & y & z\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & Bool\\\\\n",
       "\t\\hline\n",
       "\t1 & 2 & 1 & 1 \\\\\n",
       "\t2 & 4 & 2 & 0 \\\\\n",
       "\t3 & 6 & 3 & 1 \\\\\n",
       "\t4 & 8 & 4 & 0 \\\\\n",
       "\t5 & 10 & 5 & 1 \\\\\n",
       "\t6 & 12 & 6 & 0 \\\\\n",
       "\t7 & 14 & 7 & 1 \\\\\n",
       "\t8 & 16 & 8 & 0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m8×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m x     \u001b[0m\u001b[1m y     \u001b[0m\u001b[1m z     \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Bool  \u001b[0m\n",
       "─────┼─────────────────────\n",
       "   1 │     2      1   true\n",
       "   2 │     4      2  false\n",
       "   3 │     6      3   true\n",
       "   4 │     8      4  false\n",
       "   5 │    10      5   true\n",
       "   6 │    12      6  false\n",
       "   7 │    14      7   true\n",
       "   8 │    16      8  false"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@transform(df, x = 2*:x, y=:x) # create a new DataFrame adding columns based on the old one"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr><tr><th></th><th>Int64</th><th>Char</th><th>Bool</th></tr></thead><tbody><p>8 rows × 3 columns</p><tr><th>1</th><td>8</td><td>h</td><td>0</td></tr><tr><th>2</th><td>6</td><td>f</td><td>0</td></tr><tr><th>3</th><td>4</td><td>d</td><td>0</td></tr><tr><th>4</th><td>2</td><td>b</td><td>0</td></tr><tr><th>5</th><td>7</td><td>g</td><td>1</td></tr><tr><th>6</th><td>5</td><td>e</td><td>1</td></tr><tr><th>7</th><td>3</td><td>c</td><td>1</td></tr><tr><th>8</th><td>1</td><td>a</td><td>1</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& x & y & z\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char & Bool\\\\\n",
       "\t\\hline\n",
       "\t1 & 8 & h & 0 \\\\\n",
       "\t2 & 6 & f & 0 \\\\\n",
       "\t3 & 4 & d & 0 \\\\\n",
       "\t4 & 2 & b & 0 \\\\\n",
       "\t5 & 7 & g & 1 \\\\\n",
       "\t6 & 5 & e & 1 \\\\\n",
       "\t7 & 3 & c & 1 \\\\\n",
       "\t8 & 1 & a & 1 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m8×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m x     \u001b[0m\u001b[1m y    \u001b[0m\u001b[1m z     \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\u001b[90m Bool  \u001b[0m\n",
       "─────┼────────────────────\n",
       "   1 │     8  h     false\n",
       "   2 │     6  f     false\n",
       "   3 │     4  d     false\n",
       "   4 │     2  b     false\n",
       "   5 │     7  g      true\n",
       "   6 │     5  e      true\n",
       "   7 │     3  c      true\n",
       "   8 │     1  a      true"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@orderby(df, :z, -:x) # sorting into a new data frame, less powerful than sort, but lightweight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>z</th><th>x</th><th>x²</th></tr><tr><th></th><th>Bool</th><th>Int64</th><th>Int64</th></tr></thead><tbody><p>4 rows × 3 columns</p><tr><th>1</th><td>0</td><td>2</td><td>4</td></tr><tr><th>2</th><td>0</td><td>4</td><td>16</td></tr><tr><th>3</th><td>1</td><td>1</td><td>1</td></tr><tr><th>4</th><td>1</td><td>3</td><td>9</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& z & x & x²\\\\\n",
       "\t\\hline\n",
       "\t& Bool & Int64 & Int64\\\\\n",
       "\t\\hline\n",
       "\t1 & 0 & 2 & 4 \\\\\n",
       "\t2 & 0 & 4 & 16 \\\\\n",
       "\t3 & 1 & 1 & 1 \\\\\n",
       "\t4 & 1 & 3 & 9 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m4×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m z     \u001b[0m\u001b[1m x     \u001b[0m\u001b[1m x²    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Bool  \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\n",
       "─────┼─────────────────────\n",
       "   1 │ false      2      4\n",
       "   2 │ false      4     16\n",
       "   3 │  true      1      1\n",
       "   4 │  true      3      9"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@linq df |> # chaining of operations on DataFrame\n",
    "    where(:x .< 5) |>\n",
    "    orderby(:z) |>\n",
    "    transform(x²=:x.^2) |>\n",
    "    select(:z, :x, :x²)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "the last one expressed using DataFrames.jl and Pipe.jl would be, so that you can assess the differences in the syntax."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "using Pipe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>z</th><th>x</th><th>x²</th></tr><tr><th></th><th>Bool</th><th>Int64</th><th>Int64</th></tr></thead><tbody><p>4 rows × 3 columns</p><tr><th>1</th><td>0</td><td>2</td><td>4</td></tr><tr><th>2</th><td>0</td><td>4</td><td>16</td></tr><tr><th>3</th><td>1</td><td>1</td><td>1</td></tr><tr><th>4</th><td>1</td><td>3</td><td>9</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& z & x & x²\\\\\n",
       "\t\\hline\n",
       "\t& Bool & Int64 & Int64\\\\\n",
       "\t\\hline\n",
       "\t1 & 0 & 2 & 4 \\\\\n",
       "\t2 & 0 & 4 & 16 \\\\\n",
       "\t3 & 1 & 1 & 1 \\\\\n",
       "\t4 & 1 & 3 & 9 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m4×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m z     \u001b[0m\u001b[1m x     \u001b[0m\u001b[1m x²    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Bool  \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\n",
       "─────┼─────────────────────\n",
       "   1 │ false      2      4\n",
       "   2 │ false      4     16\n",
       "   3 │  true      1      1\n",
       "   4 │  true      3      9"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@pipe df |>\n",
    "    filter(:x => <(5), _) |>\n",
    "    sort!(_, :z) |>\n",
    "    transform!(_, :x => (x -> x .^ 2) => :x²) |>\n",
    "    select!(_, :z, :x, :x²)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that DataFrames.jl based syntax should be a bit faster as we update the same data frame in-place starting from the `sort!` step."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta - working on grouped `DataFrame`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><p>12 rows × 2 columns</p><tr><th>1</th><td>1</td><td>a</td></tr><tr><th>2</th><td>2</td><td>b</td></tr><tr><th>3</th><td>3</td><td>c</td></tr><tr><th>4</th><td>4</td><td>d</td></tr><tr><th>5</th><td>5</td><td>a</td></tr><tr><th>6</th><td>6</td><td>b</td></tr><tr><th>7</th><td>7</td><td>c</td></tr><tr><th>8</th><td>8</td><td>d</td></tr><tr><th>9</th><td>9</td><td>a</td></tr><tr><th>10</th><td>10</td><td>b</td></tr><tr><th>11</th><td>11</td><td>c</td></tr><tr><th>12</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a \\\\\n",
       "\t2 & 2 & b \\\\\n",
       "\t3 & 3 & c \\\\\n",
       "\t4 & 4 & d \\\\\n",
       "\t5 & 5 & a \\\\\n",
       "\t6 & 6 & b \\\\\n",
       "\t7 & 7 & c \\\\\n",
       "\t8 & 8 & d \\\\\n",
       "\t9 & 9 & a \\\\\n",
       "\t10 & 10 & b \\\\\n",
       "\t11 & 11 & c \\\\\n",
       "\t12 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     1  a\n",
       "   2 │     2  b\n",
       "   3 │     3  c\n",
       "   4 │     4  d\n",
       "   5 │     5  a\n",
       "   6 │     6  b\n",
       "   7 │     7  c\n",
       "   8 │     8  d\n",
       "   9 │     9  a\n",
       "  10 │    10  b\n",
       "  11 │    11  c\n",
       "  12 │    12  d"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a = 1:12, b = repeat('a':'d', outer=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<p><b>GroupedDataFrame with 4 groups based on key: b</b></p><p><i>First Group (3 rows): b = 'a'</i></p><table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>a</td></tr><tr><th>2</th><td>5</td><td>a</td></tr><tr><th>3</th><td>9</td><td>a</td></tr></tbody></table><p>&vellip;</p><p><i>Last Group (3 rows): b = 'd'</i></p><table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><tr><th>1</th><td>4</td><td>d</td></tr><tr><th>2</th><td>8</td><td>d</td></tr><tr><th>3</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "GroupedDataFrame with 4 groups based on key: b\n",
       "\n",
       "First Group (3 rows): b = 'a'\n",
       "\n",
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a \\\\\n",
       "\t2 & 5 & a \\\\\n",
       "\t3 & 9 & a \\\\\n",
       "\\end{tabular}\n",
       "\n",
       "$\\dots$\n",
       "\n",
       "Last Group (3 rows): b = 'd'\n",
       "\n",
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 4 & d \\\\\n",
       "\t2 & 8 & d \\\\\n",
       "\t3 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "GroupedDataFrame with 4 groups based on key: b\n",
       "First Group (3 rows): b = 'a'\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     1  a\n",
       "   2 │     5  a\n",
       "   3 │     9  a\n",
       "⋮\n",
       "Last Group (3 rows): b = 'd'\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     4  d\n",
       "   2 │     8  d\n",
       "   3 │    12  d"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = groupby(df, :b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "using Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>first</th><th>last</th><th>mean</th></tr><tr><th></th><th>Char</th><th>Int64</th><th>Int64</th><th>Float64</th></tr></thead><tbody><p>4 rows × 4 columns</p><tr><th>1</th><td>a</td><td>1</td><td>9</td><td>5.0</td></tr><tr><th>2</th><td>b</td><td>2</td><td>10</td><td>6.0</td></tr><tr><th>3</th><td>c</td><td>3</td><td>11</td><td>7.0</td></tr><tr><th>4</th><td>d</td><td>4</td><td>12</td><td>8.0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cccc}\n",
       "\t& b & first & last & mean\\\\\n",
       "\t\\hline\n",
       "\t& Char & Int64 & Int64 & Float64\\\\\n",
       "\t\\hline\n",
       "\t1 & a & 1 & 9 & 5.0 \\\\\n",
       "\t2 & b & 2 & 10 & 6.0 \\\\\n",
       "\t3 & c & 3 & 11 & 7.0 \\\\\n",
       "\t4 & d & 4 & 12 & 8.0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m4×4 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m b    \u001b[0m\u001b[1m first \u001b[0m\u001b[1m last  \u001b[0m\u001b[1m mean    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Char \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Float64 \u001b[0m\n",
       "─────┼─────────────────────────────\n",
       "   1 │ a         1      9      5.0\n",
       "   2 │ b         2     10      6.0\n",
       "   3 │ c         3     11      7.0\n",
       "   4 │ d         4     12      8.0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@by(df, :b, first=first(:a), last=last(:a), mean=mean(:a)) # groupby+combine in one shot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>first</th><th>last</th><th>mean</th></tr><tr><th></th><th>Char</th><th>Int64</th><th>Int64</th><th>Float64</th></tr></thead><tbody><p>4 rows × 4 columns</p><tr><th>1</th><td>a</td><td>1</td><td>9</td><td>5.0</td></tr><tr><th>2</th><td>b</td><td>2</td><td>10</td><td>6.0</td></tr><tr><th>3</th><td>c</td><td>3</td><td>11</td><td>7.0</td></tr><tr><th>4</th><td>d</td><td>4</td><td>12</td><td>8.0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cccc}\n",
       "\t& b & first & last & mean\\\\\n",
       "\t\\hline\n",
       "\t& Char & Int64 & Int64 & Float64\\\\\n",
       "\t\\hline\n",
       "\t1 & a & 1 & 9 & 5.0 \\\\\n",
       "\t2 & b & 2 & 10 & 6.0 \\\\\n",
       "\t3 & c & 3 & 11 & 7.0 \\\\\n",
       "\t4 & d & 4 & 12 & 8.0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m4×4 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m b    \u001b[0m\u001b[1m first \u001b[0m\u001b[1m last  \u001b[0m\u001b[1m mean    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Char \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m Float64 \u001b[0m\n",
       "─────┼─────────────────────────────\n",
       "   1 │ a         1      9      5.0\n",
       "   2 │ b         2     10      6.0\n",
       "   3 │ c         3     11      7.0\n",
       "   4 │ d         4     12      8.0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@combine(g, first=first(:a), last=last(:a), mean=mean(:a)) # the same as by but on grouped DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>a_first</th><th>a_last</th><th>a_mean</th></tr><tr><th></th><th>Char</th><th>Int64</th><th>Int64</th><th>Float64</th></tr></thead><tbody><p>4 rows × 4 columns</p><tr><th>1</th><td>a</td><td>1</td><td>9</td><td>5.0</td></tr><tr><th>2</th><td>b</td><td>2</td><td>10</td><td>6.0</td></tr><tr><th>3</th><td>c</td><td>3</td><td>11</td><td>7.0</td></tr><tr><th>4</th><td>d</td><td>4</td><td>12</td><td>8.0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cccc}\n",
       "\t& b & a\\_first & a\\_last & a\\_mean\\\\\n",
       "\t\\hline\n",
       "\t& Char & Int64 & Int64 & Float64\\\\\n",
       "\t\\hline\n",
       "\t1 & a & 1 & 9 & 5.0 \\\\\n",
       "\t2 & b & 2 & 10 & 6.0 \\\\\n",
       "\t3 & c & 3 & 11 & 7.0 \\\\\n",
       "\t4 & d & 4 & 12 & 8.0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m4×4 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m b    \u001b[0m\u001b[1m a_first \u001b[0m\u001b[1m a_last \u001b[0m\u001b[1m a_mean  \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Char \u001b[0m\u001b[90m Int64   \u001b[0m\u001b[90m Int64  \u001b[0m\u001b[90m Float64 \u001b[0m\n",
       "─────┼────────────────────────────────\n",
       "   1 │ a           1       9      5.0\n",
       "   2 │ b           2      10      6.0\n",
       "   3 │ c           3      11      7.0\n",
       "   4 │ d           4      12      8.0"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combine(g, :a .=> [first, last, mean]) # similar in DataFrames.jl - we use auto-generated column names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><p>6 rows × 2 columns</p><tr><th>1</th><td>3</td><td>c</td></tr><tr><th>2</th><td>4</td><td>d</td></tr><tr><th>3</th><td>7</td><td>c</td></tr><tr><th>4</th><td>8</td><td>d</td></tr><tr><th>5</th><td>11</td><td>c</td></tr><tr><th>6</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 3 & c \\\\\n",
       "\t2 & 4 & d \\\\\n",
       "\t3 & 7 & c \\\\\n",
       "\t4 & 8 & d \\\\\n",
       "\t5 & 11 & c \\\\\n",
       "\t6 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m6×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     3  c\n",
       "   2 │     4  d\n",
       "   3 │     7  c\n",
       "   4 │     8  d\n",
       "   5 │    11  c\n",
       "   6 │    12  d"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@where(g, mean(:a) > 6.5) # filter gropus on aggregate conditions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>center</th><th>centered</th></tr><tr><th></th><th>Int64</th><th>Char</th><th>Float64</th><th>Float64</th></tr></thead><tbody><p>12 rows × 4 columns</p><tr><th>1</th><td>1</td><td>a</td><td>5.0</td><td>-4.0</td></tr><tr><th>2</th><td>2</td><td>b</td><td>6.0</td><td>-4.0</td></tr><tr><th>3</th><td>3</td><td>c</td><td>7.0</td><td>-4.0</td></tr><tr><th>4</th><td>4</td><td>d</td><td>8.0</td><td>-4.0</td></tr><tr><th>5</th><td>5</td><td>a</td><td>5.0</td><td>0.0</td></tr><tr><th>6</th><td>6</td><td>b</td><td>6.0</td><td>0.0</td></tr><tr><th>7</th><td>7</td><td>c</td><td>7.0</td><td>0.0</td></tr><tr><th>8</th><td>8</td><td>d</td><td>8.0</td><td>0.0</td></tr><tr><th>9</th><td>9</td><td>a</td><td>5.0</td><td>4.0</td></tr><tr><th>10</th><td>10</td><td>b</td><td>6.0</td><td>4.0</td></tr><tr><th>11</th><td>11</td><td>c</td><td>7.0</td><td>4.0</td></tr><tr><th>12</th><td>12</td><td>d</td><td>8.0</td><td>4.0</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cccc}\n",
       "\t& a & b & center & centered\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char & Float64 & Float64\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a & 5.0 & -4.0 \\\\\n",
       "\t2 & 2 & b & 6.0 & -4.0 \\\\\n",
       "\t3 & 3 & c & 7.0 & -4.0 \\\\\n",
       "\t4 & 4 & d & 8.0 & -4.0 \\\\\n",
       "\t5 & 5 & a & 5.0 & 0.0 \\\\\n",
       "\t6 & 6 & b & 6.0 & 0.0 \\\\\n",
       "\t7 & 7 & c & 7.0 & 0.0 \\\\\n",
       "\t8 & 8 & d & 8.0 & 0.0 \\\\\n",
       "\t9 & 9 & a & 5.0 & 4.0 \\\\\n",
       "\t10 & 10 & b & 6.0 & 4.0 \\\\\n",
       "\t11 & 11 & c & 7.0 & 4.0 \\\\\n",
       "\t12 & 12 & d & 8.0 & 4.0 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×4 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\u001b[1m center  \u001b[0m\u001b[1m centered \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64  \u001b[0m\n",
       "─────┼────────────────────────────────\n",
       "   1 │     1  a         5.0      -4.0\n",
       "   2 │     2  b         6.0      -4.0\n",
       "   3 │     3  c         7.0      -4.0\n",
       "   4 │     4  d         8.0      -4.0\n",
       "   5 │     5  a         5.0       0.0\n",
       "   6 │     6  b         6.0       0.0\n",
       "   7 │     7  c         7.0       0.0\n",
       "   8 │     8  d         8.0       0.0\n",
       "   9 │     9  a         5.0       4.0\n",
       "  10 │    10  b         6.0       4.0\n",
       "  11 │    11  c         7.0       4.0\n",
       "  12 │    12  d         8.0       4.0"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# perform operations within a group and return ungrouped DataFrame\n",
    "@transform(g, center = mean(:a), centered = :a .- mean(:a))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><p>12 rows × 2 columns</p><tr><th>1</th><td>1</td><td>a</td></tr><tr><th>2</th><td>5</td><td>a</td></tr><tr><th>3</th><td>9</td><td>a</td></tr><tr><th>4</th><td>2</td><td>b</td></tr><tr><th>5</th><td>6</td><td>b</td></tr><tr><th>6</th><td>10</td><td>b</td></tr><tr><th>7</th><td>3</td><td>c</td></tr><tr><th>8</th><td>7</td><td>c</td></tr><tr><th>9</th><td>11</td><td>c</td></tr><tr><th>10</th><td>4</td><td>d</td></tr><tr><th>11</th><td>8</td><td>d</td></tr><tr><th>12</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a \\\\\n",
       "\t2 & 5 & a \\\\\n",
       "\t3 & 9 & a \\\\\n",
       "\t4 & 2 & b \\\\\n",
       "\t5 & 6 & b \\\\\n",
       "\t6 & 10 & b \\\\\n",
       "\t7 & 3 & c \\\\\n",
       "\t8 & 7 & c \\\\\n",
       "\t9 & 11 & c \\\\\n",
       "\t10 & 4 & d \\\\\n",
       "\t11 & 8 & d \\\\\n",
       "\t12 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     1  a\n",
       "   2 │     5  a\n",
       "   3 │     9  a\n",
       "   4 │     2  b\n",
       "   5 │     6  b\n",
       "   6 │    10  b\n",
       "   7 │     3  c\n",
       "   8 │     7  c\n",
       "   9 │    11  c\n",
       "  10 │     4  d\n",
       "  11 │     8  d\n",
       "  12 │    12  d"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DataFrame(g) # this is defined in DataFrames.jl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><p>12 rows × 2 columns</p><tr><th>1</th><td>1</td><td>a</td></tr><tr><th>2</th><td>2</td><td>b</td></tr><tr><th>3</th><td>3</td><td>c</td></tr><tr><th>4</th><td>4</td><td>d</td></tr><tr><th>5</th><td>5</td><td>a</td></tr><tr><th>6</th><td>6</td><td>b</td></tr><tr><th>7</th><td>7</td><td>c</td></tr><tr><th>8</th><td>8</td><td>d</td></tr><tr><th>9</th><td>9</td><td>a</td></tr><tr><th>10</th><td>10</td><td>b</td></tr><tr><th>11</th><td>11</td><td>c</td></tr><tr><th>12</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & a \\\\\n",
       "\t2 & 2 & b \\\\\n",
       "\t3 & 3 & c \\\\\n",
       "\t4 & 4 & d \\\\\n",
       "\t5 & 5 & a \\\\\n",
       "\t6 & 6 & b \\\\\n",
       "\t7 & 7 & c \\\\\n",
       "\t8 & 8 & d \\\\\n",
       "\t9 & 9 & a \\\\\n",
       "\t10 & 10 & b \\\\\n",
       "\t11 & 11 & c \\\\\n",
       "\t12 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     1  a\n",
       "   2 │     2  b\n",
       "   3 │     3  c\n",
       "   4 │     4  d\n",
       "   5 │     5  a\n",
       "   6 │     6  b\n",
       "   7 │     7  c\n",
       "   8 │     8  d\n",
       "   9 │     9  a\n",
       "  10 │    10  b\n",
       "  11 │    11  c\n",
       "  12 │    12  d"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@transform(g) # actually this is not the same as DataFrame() as it perserves the original row order"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Char</th></tr></thead><tbody><p>6 rows × 2 columns</p><tr><th>1</th><td>3</td><td>c</td></tr><tr><th>2</th><td>4</td><td>d</td></tr><tr><th>3</th><td>7</td><td>c</td></tr><tr><th>4</th><td>8</td><td>d</td></tr><tr><th>5</th><td>11</td><td>c</td></tr><tr><th>6</th><td>12</td><td>d</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Char\\\\\n",
       "\t\\hline\n",
       "\t1 & 3 & c \\\\\n",
       "\t2 & 4 & d \\\\\n",
       "\t3 & 7 & c \\\\\n",
       "\t4 & 8 & d \\\\\n",
       "\t5 & 11 & c \\\\\n",
       "\t6 & 12 & d \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m6×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b    \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Char \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │     3  c\n",
       "   2 │     4  d\n",
       "   3 │     7  c\n",
       "   4 │     8  d\n",
       "   5 │    11  c\n",
       "   6 │    12  d"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@linq df |>\n",
    "    groupby(:b) |>\n",
    "    where(mean(:a) > 6.5) |>\n",
    "    DataFrame # you can do chaining on grouped DataFrames as well"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The same operations using DataFrames.jl and Pipe.jl would be (note that DataFrames.jl by default puts the grouping column first)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>a</th></tr><tr><th></th><th>Char</th><th>Int64</th></tr></thead><tbody><p>6 rows × 2 columns</p><tr><th>1</th><td>c</td><td>3</td></tr><tr><th>2</th><td>c</td><td>7</td></tr><tr><th>3</th><td>c</td><td>11</td></tr><tr><th>4</th><td>d</td><td>4</td></tr><tr><th>5</th><td>d</td><td>8</td></tr><tr><th>6</th><td>d</td><td>12</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& b & a\\\\\n",
       "\t\\hline\n",
       "\t& Char & Int64\\\\\n",
       "\t\\hline\n",
       "\t1 & c & 3 \\\\\n",
       "\t2 & c & 7 \\\\\n",
       "\t3 & c & 11 \\\\\n",
       "\t4 & d & 4 \\\\\n",
       "\t5 & d & 8 \\\\\n",
       "\t6 & d & 12 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m6×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m b    \u001b[0m\u001b[1m a     \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Char \u001b[0m\u001b[90m Int64 \u001b[0m\n",
       "─────┼─────────────\n",
       "   1 │ c         3\n",
       "   2 │ c         7\n",
       "   3 │ c        11\n",
       "   4 │ d         4\n",
       "   5 │ d         8\n",
       "   6 │ d        12"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@pipe df |>\n",
    "    groupby(_, :b) |>\n",
    "    combine(sdf -> mean(sdf.a) > 6.5 ? sdf : DataFrame(), _)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta - rowwise operations on `DataFrame`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr><tr><th></th><th>Int64</th><th>Int64</th></tr></thead><tbody><p>12 rows × 2 columns</p><tr><th>1</th><td>1</td><td>1</td></tr><tr><th>2</th><td>2</td><td>2</td></tr><tr><th>3</th><td>3</td><td>3</td></tr><tr><th>4</th><td>4</td><td>4</td></tr><tr><th>5</th><td>5</td><td>1</td></tr><tr><th>6</th><td>6</td><td>2</td></tr><tr><th>7</th><td>7</td><td>3</td></tr><tr><th>8</th><td>8</td><td>4</td></tr><tr><th>9</th><td>9</td><td>1</td></tr><tr><th>10</th><td>10</td><td>2</td></tr><tr><th>11</th><td>11</td><td>3</td></tr><tr><th>12</th><td>12</td><td>4</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|cc}\n",
       "\t& a & b\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 \\\\\n",
       "\t2 & 2 & 2 \\\\\n",
       "\t3 & 3 & 3 \\\\\n",
       "\t4 & 4 & 4 \\\\\n",
       "\t5 & 5 & 1 \\\\\n",
       "\t6 & 6 & 2 \\\\\n",
       "\t7 & 7 & 3 \\\\\n",
       "\t8 & 8 & 4 \\\\\n",
       "\t9 & 9 & 1 \\\\\n",
       "\t10 & 10 & 2 \\\\\n",
       "\t11 & 11 & 3 \\\\\n",
       "\t12 & 12 & 4 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×2 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\n",
       "─────┼──────────────\n",
       "   1 │     1      1\n",
       "   2 │     2      2\n",
       "   3 │     3      3\n",
       "   4 │     4      4\n",
       "   5 │     5      1\n",
       "   6 │     6      2\n",
       "   7 │     7      3\n",
       "   8 │     8      4\n",
       "   9 │     9      1\n",
       "  10 │    10      2\n",
       "  11 │    11      3\n",
       "  12 │    12      4"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a = 1:12, b = repeat(1:4, outer=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>String</th></tr></thead><tbody><p>12 rows × 3 columns</p><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& a & b & x\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & String\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 & no \\\\\n",
       "\t2 & 2 & 2 & no \\\\\n",
       "\t3 & 3 & 3 & no \\\\\n",
       "\t4 & 4 & 4 & no \\\\\n",
       "\t5 & 5 & 1 & no \\\\\n",
       "\t6 & 6 & 2 & no \\\\\n",
       "\t7 & 7 & 3 & no \\\\\n",
       "\t8 & 8 & 4 & yes \\\\\n",
       "\t9 & 9 & 1 & no \\\\\n",
       "\t10 & 10 & 2 & no \\\\\n",
       "\t11 & 11 & 3 & no \\\\\n",
       "\t12 & 12 & 4 & yes \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\u001b[1m x      \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m String \u001b[0m\n",
       "─────┼──────────────────────\n",
       "   1 │     1      1  no\n",
       "   2 │     2      2  no\n",
       "   3 │     3      3  no\n",
       "   4 │     4      4  no\n",
       "   5 │     5      1  no\n",
       "   6 │     6      2  no\n",
       "   7 │     7      3  no\n",
       "   8 │     8      4  yes\n",
       "   9 │     9      1  no\n",
       "  10 │    10      2  no\n",
       "  11 │    11      3  no\n",
       "  12 │    12      4  yes"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# such conditions are often needed but are complex to write\n",
    "@transform(df, x = ifelse.((:a .> 6) .& (:b .== 4), \"yes\", \"no\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>String</th></tr></thead><tbody><p>12 rows × 3 columns</p><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& a & b & x\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & String\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 & no \\\\\n",
       "\t2 & 2 & 2 & no \\\\\n",
       "\t3 & 3 & 3 & no \\\\\n",
       "\t4 & 4 & 4 & no \\\\\n",
       "\t5 & 5 & 1 & no \\\\\n",
       "\t6 & 6 & 2 & no \\\\\n",
       "\t7 & 7 & 3 & no \\\\\n",
       "\t8 & 8 & 4 & yes \\\\\n",
       "\t9 & 9 & 1 & no \\\\\n",
       "\t10 & 10 & 2 & no \\\\\n",
       "\t11 & 11 & 3 & no \\\\\n",
       "\t12 & 12 & 4 & yes \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\u001b[1m x      \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m String \u001b[0m\n",
       "─────┼──────────────────────\n",
       "   1 │     1      1  no\n",
       "   2 │     2      2  no\n",
       "   3 │     3      3  no\n",
       "   4 │     4      4  no\n",
       "   5 │     5      1  no\n",
       "   6 │     6      2  no\n",
       "   7 │     7      3  no\n",
       "   8 │     8      4  yes\n",
       "   9 │     9      1  no\n",
       "  10 │    10      2  no\n",
       "  11 │    11      3  no\n",
       "  12 │    12      4  yes"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# one option is to use a function that works on a single observation and broadcast it\n",
    "myfun(a, b) = a > 6 && b == 4 ? \"yes\" : \"no\"\n",
    "@transform(df, x = myfun.(:a, :b))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>String</th></tr></thead><tbody><p>12 rows × 3 columns</p><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& a & b & x\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & String\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 & no \\\\\n",
       "\t2 & 2 & 2 & no \\\\\n",
       "\t3 & 3 & 3 & no \\\\\n",
       "\t4 & 4 & 4 & no \\\\\n",
       "\t5 & 5 & 1 & no \\\\\n",
       "\t6 & 6 & 2 & no \\\\\n",
       "\t7 & 7 & 3 & no \\\\\n",
       "\t8 & 8 & 4 & yes \\\\\n",
       "\t9 & 9 & 1 & no \\\\\n",
       "\t10 & 10 & 2 & no \\\\\n",
       "\t11 & 11 & 3 & no \\\\\n",
       "\t12 & 12 & 4 & yes \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\u001b[1m x      \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m String \u001b[0m\n",
       "─────┼──────────────────────\n",
       "   1 │     1      1  no\n",
       "   2 │     2      2  no\n",
       "   3 │     3      3  no\n",
       "   4 │     4      4  no\n",
       "   5 │     5      1  no\n",
       "   6 │     6      2  no\n",
       "   7 │     7      3  no\n",
       "   8 │     8      4  yes\n",
       "   9 │     9      1  no\n",
       "  10 │    10      2  no\n",
       "  11 │    11      3  no\n",
       "  12 │    12      4  yes"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# or you can use @byrow! macro that allows you to process DataFrame rowwise\n",
    "@eachrow df begin\n",
    "   @newcol x::Vector{String}\n",
    "    :x = :a > 6 && :b == 4 ? \"yes\" : \"no\"\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In DataFramses.jl you would write this as:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>String</th></tr></thead><tbody><p>12 rows × 3 columns</p><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& a & b & x\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & String\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 & no \\\\\n",
       "\t2 & 2 & 2 & no \\\\\n",
       "\t3 & 3 & 3 & no \\\\\n",
       "\t4 & 4 & 4 & no \\\\\n",
       "\t5 & 5 & 1 & no \\\\\n",
       "\t6 & 6 & 2 & no \\\\\n",
       "\t7 & 7 & 3 & no \\\\\n",
       "\t8 & 8 & 4 & yes \\\\\n",
       "\t9 & 9 & 1 & no \\\\\n",
       "\t10 & 10 & 2 & no \\\\\n",
       "\t11 & 11 & 3 & no \\\\\n",
       "\t12 & 12 & 4 & yes \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\u001b[1m x      \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m String \u001b[0m\n",
       "─────┼──────────────────────\n",
       "   1 │     1      1  no\n",
       "   2 │     2      2  no\n",
       "   3 │     3      3  no\n",
       "   4 │     4      4  no\n",
       "   5 │     5      1  no\n",
       "   6 │     6      2  no\n",
       "   7 │     7      3  no\n",
       "   8 │     8      4  yes\n",
       "   9 │     9      1  no\n",
       "  10 │    10      2  no\n",
       "  11 │    11      3  no\n",
       "  12 │    12      4  yes"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transform(df, [:a, :b] => ByRow((a,b) -> ifelse(a > 6 && b == 4, \"yes\", \"no\")) => :x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also use `eachrow` from DataFrames to perform the same transformation. However `@eachrow` will be faster than the operation below. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr><tr><th></th><th>Int64</th><th>Int64</th><th>String</th></tr></thead><tbody><p>12 rows × 3 columns</p><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/latex": [
       "\\begin{tabular}{r|ccc}\n",
       "\t& a & b & x\\\\\n",
       "\t\\hline\n",
       "\t& Int64 & Int64 & String\\\\\n",
       "\t\\hline\n",
       "\t1 & 1 & 1 & no \\\\\n",
       "\t2 & 2 & 2 & no \\\\\n",
       "\t3 & 3 & 3 & no \\\\\n",
       "\t4 & 4 & 4 & no \\\\\n",
       "\t5 & 5 & 1 & no \\\\\n",
       "\t6 & 6 & 2 & no \\\\\n",
       "\t7 & 7 & 3 & no \\\\\n",
       "\t8 & 8 & 4 & yes \\\\\n",
       "\t9 & 9 & 1 & no \\\\\n",
       "\t10 & 10 & 2 & no \\\\\n",
       "\t11 & 11 & 3 & no \\\\\n",
       "\t12 & 12 & 4 & yes \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "\u001b[1m12×3 DataFrame\u001b[0m\n",
       "\u001b[1m Row \u001b[0m│\u001b[1m a     \u001b[0m\u001b[1m b     \u001b[0m\u001b[1m x      \u001b[0m\n",
       "\u001b[1m     \u001b[0m│\u001b[90m Int64 \u001b[0m\u001b[90m Int64 \u001b[0m\u001b[90m String \u001b[0m\n",
       "─────┼──────────────────────\n",
       "   1 │     1      1  no\n",
       "   2 │     2      2  no\n",
       "   3 │     3      3  no\n",
       "   4 │     4      4  no\n",
       "   5 │     5      1  no\n",
       "   6 │     6      2  no\n",
       "   7 │     7      3  no\n",
       "   8 │     8      4  yes\n",
       "   9 │     9      1  no\n",
       "  10 │    10      2  no\n",
       "  11 │    11      3  no\n",
       "  12 │    12      4  yes"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = copy(df)\n",
    "df2.x = Vector{String}(undef, nrow(df2))\n",
    "for row in eachrow(df2)\n",
    "   row[:x] = row[:a] > 6 && row[:b] == 4 ? \"yes\" : \"no\"\n",
    "end\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualizing data with StatsPlots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "using StatsPlots # you might need to setup Plots package and some plotting backend first\n",
    "default(fmt=:png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "we present only a minimal functionality of the package"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "using Random\n",
    "Random.seed!(1)\n",
    "df = DataFrame(x = sort(randn(1000)), y=randn(1000), z = [fill(\"b\", 500); fill(\"a\", 500)]);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOy9ebwlVXku/K6qPZxz+vQMTdPQIE6I0A5RIqIxIoM0X7TRkPyuxvvl3hC9JtzERKOfX8ynV+NASK56zSVegxpMHEgcQkAZG2gBUeahmwaUqUd6PPM5e6iq9X5/rKpVq9ZaNey9a+9zTvf7/Pg1+9SuWmvVsNdTzzsthohAIBAIBMLRCme+B0AgEAgEwnyCiJBAIBAIRzWICAkEAoFwVIOIkEAgEAhHNYgICQQCgXBUg4iQQCAQCEc1yiFC3/fHx8c9zyulNQKBQCAQBoZyiPAv/uIvVq1adeutt5bSGoFAIBAIA0MJRPjzn//8scceO/nkk3tvikAgEAiEAaNXImy1Wn/8x3985ZVXMsZKGRCBQCAQCINEpcfjP/nJT15yySWnnXZa7p433HBDtVrVNr7pTW8aGRnpcQyDQRAEruvO9ygIITjnjkOhXgsCiIiIdDsWCDjnjDFSJh2hJyJ8+OGHb7311nvvvbfIzu985zvf/OY3a7+Wr371qyeccEIvYxgYZmZmRkdH53sUBAAARJybm1uyZMl8D4QAAOB5XhAEQ0ND8z0QAgBAo9Go1Wr01i4xMjKS+5bWExF+/OMfP/XUU7/4xS8CwOTk5A9+8IPR0dG3vOUt1p0ZY7feeqspChcLEJGIcIEAERljdDsWCIgIFxRc1yUi7BQ9EeHFF1+8Y8eO8fFxAOCcz8zMNBqNkgZGIBAIBMIgwMpahumUU0658sorL7roorQdqtXq3Nzc4lWE09PTS5cune9REAAAEHF2dpYU4QIBKcIFBTKNdoHS/Nsf/OAHX/KSl5TVGoFAIBAIg0FpijAXpAgJZYEU4YICKcIFBVKEXYAingkEAoFwVIOIkEAgEAhHNYgICQQCgXBUg4iQQCAQCEc1iAgJBEKZePuN/q17BhSCRyCUgl5rjfYb3/zmN6+99tr5HgXAwGuNfu9736MSYoRFCqJBwuLCQifCbdu2HXvssZs2bZrvgQwU733ve9vtNhEhYTGCWJCw6LDQiRAATj/99He+853zPYqBYvFmWxIIBMKiA/kICQRCyRhUlQ4CoRwQERIIBALhqAYRIYFAIBCOahAREgiEkkGWUcLiAhEhgUAgEI5qEBESCAQC4agGESGBQCAQjmoQERIIhJJB6ROExQUiwjJx6NChSy+91PrVc88992d/9mcDHg+BQCAQckFEWCY+85nPvOY1r7F+dcoppzzyyCN33nnngIdEIBAIhGwQEXaDu+++e2JiQv5533337d+/f3p6+rvf/e773ve+gwcPbtmyRX57//33P//88wDwB3/wB1/5ylcGPlgCYdAgyyhhcYGIsBt8/etfl5R2+PDhc889NwiCW2+99bTTTlu5cuWyZcs+8pGPfPWrXwWALVu2bNq0qVarAcCFF154ww03tFqt+Rw6gUAgEJJYBEW3Tfzl/cG0N6C+llTh8jP11Zf+6I/+6Hd+53c+8YlPuK77rW9964ILLli3bt1DDz10+umnA0C9Xv/Xf/3Xs88++8UvfvGll1569dVXr1u3DgDWrFkzMjKyffv21772tQMaPYFAIBDysCiJ8CXL2Jw/oL6GbEsQvuENb1izZs3NN9980UUXfeMb3/jSl74EAOPj48uWLRM7vPSlL/27v/u7jRs3fvzjH7/gggvkgStWrBgbGxvIwAkEAoFQCIuSCC89df4tuh/84AevuuqqJUuWNBqN8847DwySe/DBB1esWLFz5071qMnJyZUrVw56rATCYEE+QsLiwvwzyiLFe97znrvuuuuv//qv3//+9zuOAwCvec1rtm/fLr798Y9/fO21127dunXr1q3f/OY3xcYDBw7MzMycdtpp8zZoAoFAIBggIuwSS5Ysee973/vTn/7093//98WW888///HHH5+amtq1a9cf/uEffu973zvhhBO++93vfvSjH33ssccA4Lbbbjv//POHh4fndeAEAoFASICIsHusW7fu4osvFoEwALBixYpLLrnke9/7XqvVuuGGG84++2wAOP3007ds2SJWnL/66qv/9E//dD5HTCAMBFRZhrC4sCh9hPOOsbGxhx566Itf/OJ1112nbv/Upz7153/+5x/4wAcYY3Ljhg0bAODZZ59dt26d8CYSCISy4HFoBTBane9xEBYzSBF2g0cfffTLX/7yF77whbPOOkvdfvzxx19zzTUqC0q8+MUv/qd/+qdBDZBAmE/gAMNlbt6N/+n2QQWRE45QkCLsBuecc84555wz36MgEBYiEICB5V2wb92RHZbQK0gREgiEkjFgciImJPQIIkICgdA9HhvDS25PbGGDDZZhwDgxIaE3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l13W7rF0De6R1fCrX/3queeekzYODQ199KMfvfTSSw8cOHDgwIFisfjMM88cOHBgamqqLYPsHQ4ePKh+HYhIPzz00ENvetOb7rzzzjPPPLPlQ+t1xsfHjx49Sj/PzMyMjY05KdhegiB4//vff/jw4XvuuafdY+km3FOr4YMf/KB2+2OPPfbII488+uijAHDo0KE777xzcHDwAx/4QGtH13Ncd9111113nXbXY489tn///s997nOXXnppi0flAICtW7c++uij1FP+6KOPnnLKKe0eUU8TBMGHPvShJ5988r777isUCu0eTjfhgmUaZOvWrS5Ypr08/fTT559//vXXX3/11VfTLTt37nRuwlZy7733vve97/3Wt741MDCwd+/em2+++cYbb2z3oHqXm2666a677qIv6AAwPj6+YcOGdg+qO3AaYYNs377drcrUXp566qnp6en777///vvvp1vuueeeNWvWtHdUPcW+fftuuummSy+9tFKpvOc977nhhhvaPaKe5plnnlmzZs3NN99M/7z88ss/+clPtndI3YLTCB0Oh8PR07j0CYfD4XD0NE4QOhwOh6OncYLQ4XA4HD2NE4QOh8Ph6GmcIHQ4HA5HT+MEocPhcDh6GicIHQ6Hw9HTOEHocDgcjp7GCUKHw+Fw9DROEDocDoejp3GC0OFwOBw9jROEDofD4ehp/n+km/d/Qw7DbAAAAABJRU5ErkJggg=="
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df plot(:x, :y, legend=:topleft, label=\"y(x)\") # a most basic plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df density(:x, label=\"\") # density plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df histogram(:y, label=\"y\") # and a histogram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAY+0lEQVR4nO3de1xUdf7H8XOY4TaIgCmgmKi4mZomaK3CL1HL8Iq6akXmJTa76ZZba5c1V818ZOEvc7dCNzUvq6ll5lpuoqtCmaKJFrBKBRGGi4CaMtxh5vcH+yu7ybhzmC/M5/X8a+Y0nXk/vPRqODCj2+12DQAAqTxUDwAAQCVCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABDNdSEsKSk5c+aMy54OV1BfX696AuDObDab6gm4Cq4L4dq1a5ctW+ayp8MVVFRUqJ4AuLPKykrexrkF4UujAADRCCEAQDRCCAAQjRACAEQjhAAA0QihLDabLS0tbfPmzRkZGaq3AECzYFY9AK5z4cKF/xk+tiioZ9k13QP+ltS7dW3K9s1mM38GAIjGK0JBfvvInJwBj52f+JfaIbNKp6xPb3XT4qUvqx4FAIoRQkHSPzle33vUd3crBkx/9x97FO4BgOaAEAqi6/oP7tttHh78AQAgHdeHBBlwU9SOT3fW3Tim4a7f4TfGjRimdhKAppOWlrZ06VLVKwyzYMGCqKiopjgzIRRk1fIXPx8x/kzOLus13f2/ORLZ1vT0Y39TPQpAU/nmm28uXrz4+OOPqx5igIULF549e7aJTk4IBQkMDPz0432HDh3Kycnp129enz59VC8C0LTCwsLi4+NVrzBAcnJy052cEMqi63p0dHTv3r39/f1VbwGAZoHvlQAAiEYIAQCiEUIAgGiEEAAgGiEEAIjGd40CgBR5eXl/nP9snc11zzhq2JB7p09z3fP9VwghAEhRUlKyc29axYi5Lnq+UwcsHx0ihACAZsQzoK0WPdVFT1ZbpWmZLnouJ3CNUJzs7OyUlJT8/HzVQwCgWSCEglit1p433xKZ8Nik1w92vz0hbvydNpsLrxUAgKbl5+cfPXr0u7sHDhwoLi5WuEcjhKLE3zXtVO/ptY+8Z5/4Qs0TaXsqwp6ct1D1KACy+Pr6jh8/fs+ePZqmvfbaa4888ojyd3wkhIJ8mP6JfcCU7+7ahz++atPbCvcAECgkJGTDhg3Tpk1LSUmZP3/+1q1bfX191U7im2UEsWmadvln85o8Kysrla0BINWQIUOmTp06fPjwdevWXX/99arn8IpQEh8vL+3kvu/vH94U1j5E3RwAQtlstuPHjwcGBhYUFKjeomm8IhRl6fwnZs2939b/Tq399VruIfO/UtbveFP1KADiLFmy5NKlS8eOHRswYEB0dPSQIUPU7iGEgjx0/4yAgIDfPznPeuzNdm2vWbdtQ0x0tOpRAGRJT09fvnz5kSNHwsPD33jjjWnTpmVkZLRt21bhJL40KojVal2WvLoqtFfdgMnferV9eeVafnwCgIv5+PikpaWFh4drmjZy5MitW7cq/2YFXhEKMvXBR491u9s+4G5N02o07e/vPP380pfnPvGY6l0AXMTDw6P63BnT9mdc83T2ghP6r7v86OCNN954+d0BAwa4ZswVEEJBdv3zgH3Riu/u2m5//C8rRhJCQI6bbrpp3asv5ebmuuoJB0dFRbnquf57hFCQurr6H9z3MF28dEnRFgBq3HHHHaonNDtcIxTE02zS/rX3+/uHNrYJCFA3BwCaBV4RCjJ+5O2btzxu7z1SC+2u5aWbvjr8+JyHVY8CAMUIoSCrX3npzMTJJ3LTas6c8K48Fz/61t//7iHVowBAMUIoiK+v74H339m0adOBAwcmTJgTFxenehEAqEcIBSktLf1VVMyloAh7xz6rZy3s7Lfgi4yDHh5cJwYgGiEUJDpu3Ldxc7VfJ2iaZte0vO3PTJyS+M7GtYpnAYBShFCQvILT2kMJ398fNjvlfwcrWwOg6Z08eTIpKUn1CgN89dVXTXdyQiiYh6m+rk71CABN5c477ywoKFD++e+GGDNmTNeuXZvo5IRQkIDW/uez92i9hv3n/sH1N3T/ldJFAJqQyWR66qmnVK9oAQihIHvf3nDzbaPr+o7XOvbRPz/g89XHu/+VoXoUACjWfEN44MCB+fPnq17hbm6+vnP+538vz3wn0M+703Wdxo8fr3qRu1m7dm2XLj9+l2EAzVnzDeENN9zw7LPPql7hhi5evDhlypR1b/GRvE0iODhY9QQAV6f5hrBt27axsbGqV7ih0tJSs9nMry0ANOCHqQEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaM6G8Msvv5w5c2b//v0jIyNnz5797bffGjILAADXcDaE2dnZoaGhycnJb7zxRmZmZmJioiGzAABwDWd/oH7s2LFjx45tuL1gwYLRo0c7PQkAANcx8hrhkSNHevbsaeAJAQBoaoa9xVpmZuaiRYt27dp1hcesWrVq48aNlx8ZMWLEyy+/bNQGOMJqtdrt9rKyMtVDALdVUVFRX1+v67rqIdAsFovJZLryY4wJYU5OzvDhw5OTk6Ojo6/wsISEhLlz515+xNfX19/f35ANcFB1dbWu6/yyA03Hw8PDYrEQwpbCgBDm5uYOGzZs8eLFCQkJV36kn59fWFiY888IAIBRnA1hfn7+0KFDZ82aNXbs2AsXLmiaFhgYyP8HAQBaCme/WWbXrl1lZWVLliyJ+H+VlZWGLAMAwAWcDeHDDz98/ocsFoshywAAcAHeYg0AIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGhm1QN+UUFBQWpqquoVbqisrKy6unrDhg2qh7in8PDwQYMGqV4B4Co03xCOnDj5K1ughyVA9RD3Y7f3uO3h13ernuGG6koLBnVrRwiBlqX5hvDit+cr7nlF69BT9RDAYRnbbae3qB4B4OpwjRAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiGZWPeAXVVZWahnbtbx01UMAh319/HztedUjAFyd5hvC2qoq05E3dbOn6iFuyG7XdF31CHdkq66oCA1SvQLA1Wm+IWwdFHTpnk1ah56qhwAOy9je8fQW1SMAXB2uEQIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCt+b7ptl+r1r7vL9L9AlQPcUN2m1334OMnjFdf8rXehT+xQAvTfEP4j22b9u7dq3qFG7JarfPmzVu2bJnqIW5pQJcuXVRvAHB1dLvd7ppnSkpKKi4uTkpKcs3T4ZeUlpZ279793LlzqocAbqu8vNxiseh87GcLwTVCAIBohBAAIBohBACIRggBAKIRQgCAaAb8+ER5efkHH3xQW1sbFxcXFBTk/AkBAHAZZ18Rnj9/PjIycvXq1du3b+/Vq9fXX39tyCwAAFzD2RCuXLkyIiJi165dW7ZsGTVq1NKlSw2ZBQCAazgbwvfee2/ChAkNtydMmLBz506nJwEA4DrOXiMsLCwMCwtruN2xY8czZ87YbDYPj5/v64kTJ5YvX375kYiIiLi4uJ99cEFBQWpqqpPz8FNWq7W6unrNmjWqh7inMWPGBAYGql7hqK1bt9bU1Khe4Yaqq6u9vLx4Z5mm0KNHj379+jn+eLPZ3OhvhLMhrK+vN5lMDbdNJpPNZrvCe7adP3/+1KlTlx/x8fGpr6//2QcXFRXt27fPyXn4WaNGjeLXtonExsb6+/urXuGo/fv3V1ZWql7hhlJTUyMiIjp27Kh6iBvSdb1v376OP95kMjV5CNu3b19cXNxw++zZsyEhId918aeGDh3q+HuNxsTExMTEODkPP6usrKwF/ccaTWfVqlWqJ7in0aNH33fffePGjVM9BA5x9hrh4MGDU1JSGm6npKQMHjzY2UUAALiQs68IZ86cGRUVNWfOnFatWr366qv79+83ZBYAAK7h7CvC8PDwY8eOBQQE2O32Q4cORUVFGTILAADXMOCdZTp37vzMM884fx4AAFyP9xoFAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACCaAT9QD6CFev311/kYpqaQn5+/a9euwsJC1UPc04wZM7y8vAw8ISEEhFqxYsWjL6zw6DZQ9RB31PbXubn6hq+yVO9wQ7WpayZPnkwIARigoqJC6z64aqKjn4wGNAfeh980/JxcIwQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaLzXKCDUqVOn6o7/01yar3oIcBVqKqyVlZWBgYEGnpMQAkK1adNG9/Gva91B9RDgKphMJrPZ4HIRQkCo4OBgU4/B9Xz6BFoU89FNnp6exp6Ta4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0s+oBANSIjIzU/rTQ++P1qoe4IZutXtc9dF1XPcQN1ZRfMvychBAQasiQIUWn8+12u+ohbighIWHKlCkjR45UPcQ9BQQEGHtCQgjIFRQUpHqCe/L09GzVqlWbNm1UD4FDuEYIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARHM2hCdPnpwyZcp1110XERGRmJhYUlJiyCwAAFzD2RDm5+f3799/586de/bsKSkpmT59uhGrAABwEbOT//6IESNGjBjRcPvJJ58cNWqU05MAAHAdI68RpqWl9e3b18ATAgDQ1Bx9RZiWllZUVPSjg2FhYTExMQ23jxw58uKLL+7bt+8KJ3nttdeSk5MvPxIfH//Xv/7V4bUwRnl5ua7rqlcAbquurq6qqspqtaoeAs1isXh4NPKSz9EQHjx4MDMz80cH+/fv3xDCzz77LD4+fv369VFRUVc4yYwZMxYtWnT5EU9PTx8fHwc3wCh2u71Vq1aqVwBuy2w2+/j48LespXA0hE8//fQv/aPs7Ozhw4e/8sor8fHxVz6Jp6env7//VawDAKCJOXuNMCcn59Zbb505c2ZUVFReXl5eXp7dbjdkGQAALuDsd40ePHjQz89vzZo1a9asaTiSlZXl6+vr9DAAAFzB2RAmJiYmJiYaMgUAANfjLdYAAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiOfsJ9QBarqysrPr6etUr3EphYeFzy5KPfZZ1KPuPH+z/cMbUu81m/jNrpHbt2nXo0MHYc/I7BMj1wAMPWK1W1SvcR319fc6/L9Td/6Z258Dz9bUr3/3TljETOrULUL3Lrdxzzz1z5swx9pyEEJDr4MGDqie4lcVLXnjmUy8tYqCmaZrJU5vwfNmJnYcPH/b19VU9DVfCNUIAMMaKtZu0sBsuP1LfrmtWVpaqPXAQIQQAY3x74YL2dcb39+027ewXmZmZ6hbBIYQQAIwRFtJW+3C1dmKnVl+rVVzQNj2q1VQOHDhQ9S40ghACgDGeXzhPq7yopa3SXhisvfIbreCEp8mjR48eqnehEYQQAIwxfvz4X3UN105/ql0q1i58oxfn/nnxPNWj0Di+axQAjLFv377S1tdpz7yt5aVrfm3sbbss/vOkBx+4X/UuNIIQAoAxdu5NvdD3Di2gvRY5ruFIbVDn/Pz8zp07K92FRvClUQAwhp+Pt1Zb/YNDdVU+Pj6K5sBRhBAAjPGb0cOvSX9ds9X9535hdpCtLDQ0VOkoNI4vjQKAMaKioub+duKS5bE1EYPMVRdaF2fv2Lpe9Sg0jhACgGF+//D90+6aePjw4eDg4L59+/KO2y0Cv0kAYKQ2bdrExsZaLBZd11VvgUO4RggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANH4PEIAMIzNZtuwafPf96QGXxP00PS7+/Tpo3oRGscrQgAwhs1mGzRi3O/eznyn47QV9luGTn10/cbNqkehcbwiBABjbH/33c88u5WNfrbh7rluMU8sHHRPwh0eHrzkaNb47QEAY+w9eLTsumHf3/f20zr0ys3NVbcIDiGEAGCM8PbBelnJDw6VlbRr107RHDiKEAKAMSaNj2/78auatbThrkfm+xHXWAIDA9WuQqO4RggAxoiIiFi37LkHH4uv8munVV7q1bn9lo2rVY9C4wghABhmxO3Dvs4alpeXFxIS4ufnp3oOHMKXRgHAYCEhIRaLRfUKOIoQAgBEI4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARCOEAADRCCEAQDRCCAAQzbAQfvLJJ+np6UadDQAA1zAbcpZjx47FxsZ27949IyPDkBMCAOAaBrwirKurmzlz5qOPPur8qQAAcDEDQvjcc8/FxcX16tXL+VMBAOBizn5pNDMzc9u2bUePHt22bVujDz5y5MiiRYsuP9KjR4+xY8c6uQFXq7a2tra2VvUKwG01/BXTdV31EGhms7nR3wiHQnj48OHJkyf/9Pj7779/3333JScn+/j4OHKempoaq9V6+ZGKigqbzebIvwsD2Ww2ftmBptPwV4wQthS63W5v9EHV1dVFRUU/PZ6bmztx4sTbbrtN07SCgoKcnJxhw4Zt2LDB29v7pw9OSkoqLi5OSkpyfjScVFZW5u/vr3oF4LbKy8stFgshbCkcekXo7e0dHh7+0+O+vr4rV65suP3RRx8VFxdPmjTJZDIZORAAgKbk1DXC4ODgSZMmNdyuqan58MMPv7sLAECLYMzPEWqadssttwQHBxt1NgAAXMOwEHbq1KlTp05GnQ0AANfgvUYBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAAIBohBACIRggBAKIRQgCAaIQQACAaIQQAiEYIAQCiEUIAgGiEEAAgGiEEAIhGCAEAohFCAIBohBAADPPFF18MHj2x202DOvW+6ck/Laqurla9CI0jhABgjHPnzg0Zl5AaOafoscPfPPLRn09qibMeUz0KjSOEAGCMN7e8dTZquhYepWma5mGqintqz8fHKioqVO9CIwghABjj08/z6kKuu/yIHtKtoKBA1R44iBACgDEG3tjT+/Sx7+/bbfbC7K5du6pbBIcQQgAwRsJdd3bM2WH+5C2ttkq7+O/Wmx9KvGuCl5eX6l1oBCEEAGP4+voe3f+P3/p+2m3V8H7vP/iXxGHPL5irehQaZ1Y9AADcR1BQ0IplL5SXl1ssFl3XVc+BQ3hFCAAQjRCKc+nSpcTERNUrAHe2ZMmS9PR01SvgKEIoTk1Nzb59+1SvANzZ8ePHi4qKVK+AowghAEA0QggAEE232+2ueabdu3ffe++9JpPJNU+HX2K32y9evBgYGKh6COC2rFart7e3p6en6iHQdu/e3bNnzys/xnUh1DStsLDQZrO57OkAAMKFhoY2+n8kLg0hAADNDdcIAQCiEUIAgGiEEAAgGiEEAGPU1tZmZGSoXoGrxjfLAIAxzp49e+2119bU1KgegqvDK0IAgGiEUJaXXnopNja2d+/ed999d15enuo5gBvasWPHwIEDBw0atGPHDtVb4BBCKEuHDh1Wr169d+/eqKioCRMmqJ4DuJu6urqNGze+9dZbCxYsSExMPHHihOpFaBzXCMXJzMzMz8+vqqqaOnVqQUFBu3btVC8C3MTZs2dDQ0O//PLLiIgITdNmz56t6/qyZctU70Ij+IR6QWpra0eNGlVdXd2vXz8vLy8PD4/S0lJCCBhI1/XOnTs33I6IiEhNTVU6Bw4hhIKkp6cXFhZmZWXpul5eXr506VLViwB3Y7fbz5w5c+2112qadvr06fbt26tehMZxjVAQPz+/4uLiwsLCysrKP/zhD6rnAG5I1/X58+dXVVVlZ2evW7cuISFB9SI0jleEgkRGRs6aNWvgwIEWi2X27Nm33nqrj4+P6lGA+/D09Lz55ptjYmJ69+5tMpkWL14cHR2tehQaxzfLAABE40ujAADRCCEAQDRCCAAQjRACAEQjhAAA0QghAEA0QggAEI0QAgBEI4QAANEIIQBANEIIABCNEAIARPs/Pv0TzEtEek4AAAAASUVORK5CYII="
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df boxplot(:z, :x, label=\"x\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df violin(:z, :y, label=\"y\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "@webio": {
   "lastCommId": null,
   "lastKernelId": null
  },
  "kernelspec": {
   "display_name": "Julia 1.5.3",
   "language": "julia",
   "name": "julia-1.5"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
